package main

import (
	"fmt"
	"strconv"
)

// 管道 select
func main() {
	intChan := make(chan int, 10)
	for i := 0; i < 10; i++ {
		intChan <- i
	}
	stringChan := make(chan string, 10)
	for i := 0; i < 5; i++ {
		stringChan <- "hello" + strconv.Itoa(i)
	}
	// 实际开发中可能不确定chan关闭方式 使用select
	for {
		select {
		// 如果管道没有关闭，不会一直阻塞而deadlock
		// 会自动到下一个case
		case v := <-intChan:
			fmt.Println("iniChan读取数据=", v)
		case v := <-stringChan:
			fmt.Println("stringChan读取数据=", v)
		default:
			fmt.Println("都取不到数据。。。")
			// break 只推出select，不会退出for
			return
		}
	}
}
